Zum Hauptinhalt springen

Liquid Templating

Liquid ist eine Templatesprache die in 42°OS überall dort eingesetzt wird, wo du Texte dynamisch mit Werten aus der aktuellen Nachricht befüllen willst — in SQL-Statements des Internal Storage Agents, in Message Formatting Agents, in E-Mail-Texten und an vielen weiteren Stellen.

Das Grundprinzip: du schreibst einen Text mit Platzhaltern, und Liquid setzt beim Ausführen die echten Werte ein.


Grundsyntax

Werte ausgeben: {{ }}

Doppelte geschweifte Klammern geben den Wert einer Variable aus:

Guten Morgen, {{ name }}!

Wenn die Nachricht {"name": "Jonas"} enthält, ergibt das:

Guten Morgen, Jonas!

Verschachtelte Objekte werden mit Punkt navigiert:

{{ supplier.name }}
{{ supplier.address.city }}

Array-Elemente mit Index (beginnt bei 0):

{{ positions[0].bezeichnung }}

Logik: {% %}

Geschweifte Klammern mit Prozentzeichen enthalten Logik — Bedingungen, Schleifen, Zuweisungen. Sie geben keinen Text aus.


Bedingungen

{% if amount > 1000 %}
Großauftrag — bitte Freigabe einholen.
{% elsif amount > 500 %}
Standardauftrag.
{% else %}
Kleinauftrag.
{% endif %}

Vergleichsoperatoren: ==, !=, >, <, >=, <=

Logische Operatoren: and, or

{% if level == "ERROR" or level == "CRITICAL" %}
⚠️ Kritischer Eintrag: {{ info }}
{% endif %}

Prüfen ob ein Wert vorhanden ist:

{% if customer_number != null and customer_number != "" %}
Kundennummer: {{ customer_number }}
{% endif %}

Schleifen

{% for position in positions %}
- {{ position.bezeichnung }}: {{ position.betrag }} €
{% endfor %}

Wenn positions ein Array ist, wird der Block für jedes Element wiederholt. Mit forloop-Hilfsvariablen:

{% for entry in log_entries %}
{% if forloop.first %}### Log-Einträge{% endif %}
{{ forloop.index }}. {{ entry.level }} — {{ entry.info }}
{% endfor %}
VariableBedeutung
forloop.indexAktueller Index, beginnt bei 1
forloop.index0Aktueller Index, beginnt bei 0
forloop.firsttrue beim ersten Durchlauf
forloop.lasttrue beim letzten Durchlauf
forloop.lengthGesamtanzahl der Elemente

Filter

Filter verändern einen Wert bei der Ausgabe. Sie werden mit | angehängt:

{{ name | upcase }}              → JONAS
{{ name | downcase }} → jonas
{{ name | capitalize }} → Jonas
{{ amount | round: 2 }} → 1190.00
{{ invoice_date | date: "%d.%m.%Y" }} → 10.03.2026
{{ text | strip }} → Leerzeichen am Anfang/Ende entfernen
{{ text | replace: "GmbH", "GmbH & Co. KG" }}
{{ array | size }} → Anzahl der Elemente
{{ array | first }} → erstes Element
{{ array | last }} → letztes Element
{{ array | join: ", " }} → Elemente mit Komma verbinden

Variablen zuweisen

{% assign total = 0 %}
{% for position in positions %}
{% assign total = total | plus: position.betrag %}
{% endfor %}
Gesamtbetrag: {{ total }} €

Praxisbeispiele in 42°OS

SQL-Statement mit Liquid (Internal Storage Agent)

INSERT INTO logs (log_entry_id, log_date, log_time, level, source, info, reported_state, created_at)
VALUES (
'{{ log_date }}-{{ log_time }}-{{ source }}',
'{{ log_date }}',
'{{ log_time }}',
'{{ level }}',
'{{ source }}',
'{{ info }}',
'unreported',
datetime('now')
)

Markdown-Tabelle aus Array (Message Formatting Agent)

| Level | Quelle | Info | Anzahl |
|---|---|---|---|
{% for entry in log_entries %}
| {{ entry.level }} | {{ entry.source }} | {{ entry.info }} | {{ entry.anzahl }} |
{% endfor %}

E-Mail mit Bedingung

Betreff: {% if level == "ERROR" %}⚠️ Fehler{% else %}Info{% endif %} — {{ source }}

Hallo,

im Schichtbericht vom {{ report_date }} wurde folgender Eintrag erfasst:

**Level:** {{ level }}
**Quelle:** {{ source }}
**Beschreibung:** {{ info }}
**Erstes Auftreten:** {{ erstes_auftreten }}
**Anzahl:** {{ anzahl }}

{% if anzahl > 10 %}
⚠️ Dieser Fehler tritt häufig auf. Bitte prüfen.
{% endif %}

Häufige Fehler

Variable existiert nicht — wenn ein Schlüssel in der Nachricht fehlt, gibt {{ schluessel }} einen leeren String zurück (kein Fehler, aber leise). Mit {% if schluessel != null %} absichern wenn der Wert zwingend gebraucht wird.

Array vs. einzelner Wert{% for x in y %} funktioniert nur wenn y ein Array ist. Wenn y ein einzelnes Objekt ist, gibt es einen Fehler oder keine Ausgabe.

Zahlen als Strings{{ amount | plus: 100 }} funktioniert nur wenn amount eine Number ist. Strings müssen erst mit | plus: 0 in Zahlen umgewandelt werden.


Weiterführend

Die vollständige Liquid-Dokumentation mit allen Filtern und Tags: shopify.github.io/liquid — 42°OS nutzt den Liquid-Standard, alle dort dokumentierten Funktionen funktionieren auch hier.